<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var name = 'windowName'
    const obj = {
        name: 'objName',
        say: function (a, b) {
            console.log(this.name, a, b)
        }
    }
    const say2 = obj.say
    /**
     * bind 方法用来创建一个新的函数，
     * 并将第一个参数作为调用该函数的 this，
     * 并以参数列表的形式将参数传给该函数。
     * 它和 call 的区别就是，call 会直接调用函数，
     * 而 bind 需要手动调用一次
     * @type {any}
     */
    const say3 = say2.bind(obj, 1, 2)
    const say4 = say2.bind(null, 1, 2)
    const say5 = say2.bind(undefined, 1, 2)
    const say6 = say2.bind(false, 1, 2)
    say3()  // objName 1 2
    say4()  // windowName 1 2
    say5()  // windowName 1 2
    say6()  // undefined 1 2

</script>
</body>
</html>
